home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_481 / wavemaker / wavemaker.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  67KB  |  1,628 lines

  1. /**********************************************************************/
  2. /*                                                                    */
  3. /*  WaveMaker - a program to allow a user to construct waveforms      */
  4. /*              by superposition of harmonic sine waves.              */
  5. /*                                                                    */
  6. /*                                                                    */
  7. /*  This program is intended for beginning music and physics students */
  8. /*  to help them get a better intuitive feel for constructing a       */
  9. /*  complex wave form from a sum of harmonics.                        */
  10. /*                                                                    */
  11. /*  For program operation see WaveMaker.doc.                          */
  12. /*                                                                    */
  13. /*  This program was written in SAS C, version 5.10.  It is           */
  14. /*  compiled with the enclosed lmkfile.                               */
  15. /*                                                                    */
  16. /*  WaveMaker is freely distributable as long as it is not sold for   */
  17. /*  profit.  It is permitted (encouraged) to include it on software   */
  18. /*  collections sold for a nominal sum, such as club disks and        */
  19. /*  Fish disks.  Copyright is retained by the author.                 */
  20. /*                                                                    */
  21. /*  Thanks are due to those people who posted example programs in     */
  22. /*  the BIX listings area.  One good example is worth several chapters*/
  23. /*  of explanation.  Of particular use were gad.c and menu.c. both by */
  24. /*  John Draper, and scales.c by Steven A. Bennett.                   */
  25. /*                                                                    */
  26. /*  Comments, bugs, complaints, and praise may be sent to me at       */
  27. /*                  Thomas Meyer                                      */
  28. /*                  12 Physics, Iowa State University                 */
  29. /*                  Ames, IA 50010                                    */
  30. /*                  BIX: TMEYER                                       */
  31. /*                  BITNET:MEYER@ALISUVAX                             */
  32. /*                  Internet: meyer@iastate.edu                       */
  33. /*                                                                    */
  34. /**********************************************************************/
  35. /*                                                                    */
  36. /* Update history:                                                    */
  37. /*    4/10/91    Version 1.2                                          */
  38. /*                 Wave calculation speeded up                        */
  39. /*                 Bad pointers fixed (guru causers)                  */
  40. /*                 Display of partial sums added                      */
  41. /*                 Bug fixed in display when waveform rescales        */
  42. /*    1/24/90    Version 1.1                                          */
  43. /*                 Easy game added                                    */
  44. /*                 Fixed crashes from rawkey>64                       */
  45. /*                 Closed down in correct order                       */
  46. /*                 Game doesn't interfere with amps[]                 */
  47. /*                 Random seed from timer                             */
  48. /*    1/21/90    Version 1.0 released on AAAUG club disk              */
  49. /**********************************************************************/
  50.  
  51. #include <math.h>
  52. #include <stdio.h>
  53. #include <exec/types.h>
  54. #include <exec/nodes.h>
  55. #include <exec/lists.h>
  56. #include <exec/ports.h>
  57. #include <exec/devices.h>
  58. #include <exec/memory.h>
  59. #include <hardware/custom.h>
  60. #include <hardware/dmabits.h>
  61. #include <proto/dos.h>
  62. #include <devices/audio.h>
  63. #include <devices/inputevent.h>
  64. #include <proto/intuition.h>
  65. #include <graphics/gfxbase.h>
  66. #include <graphics/gfx.h>
  67. #include <graphics/clip.h>
  68. #include <graphics/view.h>
  69. #include <graphics/rastport.h>
  70. #include <proto/layers.h>
  71.  
  72. extern struct MsgPort *CreatePort();
  73. extern VOID ModifyProp();
  74. extern VOID PrintIText();
  75.  
  76. struct IntuitionBase *IntuitionBase;
  77. struct GfxBase *GfxBase;
  78. struct Window *Window;
  79. struct Screen *Screen;
  80. struct ViewPort *ViewPort;
  81. struct RastPort *rport;
  82. struct IntuiMessage *mesg;
  83. struct IOAudio *ioa,*audchan[4],*finish[4];
  84.  
  85. /****************************************/
  86. /*  Build the Intuition Gadgets         */
  87. /****************************************/
  88.  
  89. /*      Define Logicals for GadgetIDs   */
  90.  
  91. #define HARMON0 0
  92. #define HARMON1 1
  93. #define HARMON2 2
  94. #define HARMON3 3
  95. #define HARMON4 4
  96. #define HARMON5 5
  97. #define HARMON6 6
  98. #define HARMON7 7
  99. #define INTEG   0
  100. #define UPARROW 8
  101. #define DNARROW 16
  102. #define PROPOR  24
  103. #define PLUSMINUS 32
  104. #define SELECT  64
  105. #define YES     1
  106. #define NO      0
  107. #define NBR_IOA_STRUCTS 6
  108.  
  109. /* define logicals for ErrExit */
  110.  
  111. #define SUCCESS         0
  112. #define INTUITION_FAIL  1
  113. #define GRAPHICS_FAIL   2
  114. #define PORTPN_FAIL     3
  115. #define PORTP0_FAIL     4
  116. #define AUDIOALLOC_FAIL 5
  117. #define AUDIO_FAIL      6
  118. #define USERSOUND_FAIL  7
  119. #define REFSOUND_FAIL   8
  120. #define SCREEN_FAIL     9
  121. #define WINDOW_FAIL    10
  122.  
  123. /*  Miscellaneous logicals */
  124.  
  125. #define INTUITION_REV 0
  126. #define GRAPHICS_REV 0
  127.  
  128. #define TWOPI 6.283185
  129.  
  130. /*************************************/
  131. /*  Global variables and structures  */
  132. /*************************************/
  133.  
  134. SHORT sinewave[8][513];
  135. LONG amps[8],refamps[8];
  136. LONG maxuser=1,maxref=1;
  137. LONG maxamp=16066;
  138. BYTE waveform[514],refform[514],selform[514];
  139. BYTE *usersound,*refsound;
  140. BYTE sunit=0x0F;
  141. SHORT audiochan[128] ={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  142.                    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  143.                    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  144.                    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  145.                    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  146.                    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  147.                    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  148.                    -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
  149. SHORT waiting[5]={NO, NO, NO, NO, NO};
  150. SHORT gameon=NO;
  151. UBYTE selflag,bitval[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
  152.                         0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
  153. VOID ErrExit();
  154.  
  155. /*  Structures for drawing waveforms    */
  156.  
  157. USHORT userwave[513][2],refwave[513][2],selwave[513][2];
  158.  
  159. struct Border UWave_brd1 =
  160. {
  161.     64,13,                        /* LeftEdge, TopEdge              */
  162.     4,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  163.     127,&userwave[0][0],          /* Count, *XY                     */
  164.     NULL                          /* *NextBorder                    */
  165. };
  166. struct Border UWave_brd2 =
  167. {
  168.     64,13,                        /* LeftEdge, TopEdge              */
  169.     4,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  170.     127,&userwave[126][0],        /* Count, *XY                     */
  171.     &UWave_brd1                   /* *NextBorder                    */
  172. };
  173. struct Border UWave_brd3 =
  174. {
  175.     64,13,                        /* LeftEdge, TopEdge              */
  176.     4,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  177.     127,&userwave[252][0],        /* Count, *XY                     */
  178.     &UWave_brd2                   /* *NextBorder                    */
  179. };
  180. struct Border UWave_brd4 =
  181.     64,13,                        /* LeftEdge, TopEdge              */
  182.     4,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  183.     127,&userwave[378][0],        /* Count, *XY                     */
  184.     &UWave_brd3                   /* *NextBorder                    */
  185. };
  186. struct Border UWave_brd5 =
  187. {
  188.     64,13,                        /* LeftEdge, TopEdge              */
  189.     4,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  190.     9,&userwave[504][0],          /* Count, *XY                     */
  191.     &UWave_brd4                   /* *NextBorder                    */
  192. };
  193. struct Border RWave_brd1 =
  194. {
  195.     64,13,                        /* LeftEdge, TopEdge              */
  196.     6,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  197.     127,&refwave[0][0],           /* Count, *XY                     */
  198.     NULL                          /* *NextBorder                    */
  199. };
  200. struct Border RWave_brd2 =
  201. {
  202.     64,13,                        /* LeftEdge, TopEdge              */
  203.     6,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  204.     127,&refwave[126][0],         /* Count, *XY                     */
  205.     &RWave_brd1                   /* *NextBorder                    */
  206. };
  207. struct Border RWave_brd3 =
  208. {
  209.     64,13,                        /* LeftEdge, TopEdge              */
  210.     6,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  211.     127,&refwave[252][0],         /* Count, *XY                     */
  212.     &RWave_brd2                   /* *NextBorder                    */
  213. };
  214. struct Border RWave_brd4 =
  215.     64,13,                        /* LeftEdge, TopEdge              */
  216.     6,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  217.     127,&refwave[378][0],         /* Count, *XY                     */
  218.     &RWave_brd3                   /* *NextBorder                    */
  219. };
  220. struct Border RWave_brd5 =
  221. {
  222.     64,13,                        /* LeftEdge, TopEdge              */
  223.     6,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  224.     9,&refwave[504][0],           /* Count, *XY                     */
  225.     &RWave_brd4                   /* *NextBorder                    */
  226. };
  227.  
  228. struct Border SWave_brd1 =
  229. {
  230.     64,13,                        /* LeftEdge, TopEdge              */
  231.     5,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  232.     127,&selwave[0][0],           /* Count, *XY                     */
  233.     NULL                          /* *NextBorder                    */
  234. };
  235. struct Border SWave_brd2 =
  236. {
  237.     64,13,                        /* LeftEdge, TopEdge              */
  238.     5,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  239.     127,&selwave[126][0],         /* Count, *XY                     */
  240.     &SWave_brd1                   /* *NextBorder                    */
  241. };
  242. struct Border SWave_brd3 =
  243. {
  244.     64,13,                        /* LeftEdge, TopEdge              */
  245.     5,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  246.     127,&selwave[252][0],         /* Count, *XY                     */
  247.     &SWave_brd2                   /* *NextBorder                    */
  248. };
  249. struct Border SWave_brd4 =
  250.     64,13,                        /* LeftEdge, TopEdge              */
  251.     5,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  252.     127,&selwave[378][0],         /* Count, *XY                     */
  253.     &SWave_brd3                   /* *NextBorder                    */
  254. };
  255. struct Border SWave_brd5 =
  256. {
  257.     64,13,                        /* LeftEdge, TopEdge              */
  258.     5,0,JAM1,                     /* FrontPen, BackPen, DrawMode    */
  259.     9,&selwave[504][0],           /* Count, *XY                     */
  260.     &SWave_brd4                   /* *NextBorder                    */
  261. };
  262.  
  263. /*      Declare the character buffer for IntuitText structures 
  264.         (to be filled later).                                         */
  265.     
  266. char textbuf[6]="    0";
  267.  
  268. struct IntuiText textamp =
  269. {
  270.     1,0,JAM2,           /* FrontPen, BackPen, DrawMode            */
  271.     0,0,                /* LeftEdge, TopEdge (use offsets to set) */
  272.     NULL,               /* *ITextFont   (use default)             */
  273.     (char *)&textbuf,   /* *IText (fill later)                    */
  274.     NULL                /* *NextText                              */
  275. };
  276.  
  277. /*   Border structures for the amplitude display box                  */
  278.  
  279. USHORT BoxPairsb[9][2]=
  280. {
  281.     2,11, 53,11, 53,2, 54,2, 54,11,
  282.     55,11, 55,2, 56,2, 56,11       /* Brown shadow around int */
  283. };
  284.  
  285. struct Border brdi1b =
  286. {
  287.     -2,-2,2,0,           /* LeftEdge, TopEdge, FrontPen, BackPen   */
  288.     JAM1, 9,             /* DrawMode, Count                        */
  289.     (USHORT *)&BoxPairsb,/* *XY                                    */
  290.     NULL                 /* *NextBorder                            */
  291. };
  292.  
  293. USHORT BoxPairs[5][2]=
  294. {
  295.     0, 0,  52,0,  52,10,   0,10,  0,0  /* Coords of box  */
  296. };
  297.  
  298. struct Border brdi1 =
  299. {
  300.     -2,-2,1,0,           /* LeftEdge, TopEdge, FrontPen, BackPen   */
  301.     JAM1, 5,             /* DrawMode, Count                        */
  302.     (USHORT *)&BoxPairs, /* *XY                                    */
  303.     &brdi1b              /* *NextBorder                            */
  304. };
  305.  
  306. /*************************************/
  307. /*     First amplitude gadgets       */
  308. /*************************************/
  309.  
  310. /*  Proportional gadget  */
  311.  
  312. struct PropInfo prop_info1 =
  313. {
  314.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  315.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  316.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  317.     16,64,              /* CWidth,CHeight                         */
  318.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  319.     0,0                 /* LeftBorder, TopBorder                  */
  320. };
  321.  
  322. struct IntuiText protext1 =
  323. {
  324.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  325.     -20, 3,             /* LeftEdge, TopEdge                      */
  326.     NULL,"1:",          /* *ITextFont, *Itext                     */
  327.     NULL                /* *NextText                              */
  328. };
  329.  
  330. struct Image empty1,empty2,empty3,empty4,empty5,empty6,empty7,empty8;
  331.  
  332. struct Gadget propor1 =
  333. {
  334.     NULL,65,113,               /* *NextGadget, LeftEdge, TopEdge     */
  335.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  336.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  337.     PROPGADGET,(APTR)&empty1,  /* GadgetType, GadgetRender           */
  338.     NULL,                      /* SelectRender                       */
  339.     &protext1,0,               /* *GadgetText, MutualExclude         */
  340.     (APTR)&prop_info1,         /* SpecialInfo                        */
  341.     HARMON0|PROPOR,            /* GadgetID                           */
  342.     NULL                       /* UserData                           */
  343. };
  344.  
  345. /*   Up arrow gadget     */
  346.  
  347. USHORT updn_shadata[] = {2,7, 17,7, 17,1, 18,1, 18,7, 19,7, 19,1};
  348. struct Border updn_shadow =
  349. {
  350.     -2,-1,2,0,               /* LeftEdge, TopEdge, FrontPen, BackPen */
  351.     JAM1,7,                  /* DrawMode, Count                      */
  352.     (USHORT *)&updn_shadata, /* *XY                                  */
  353.     NULL                     /* *NextBorder                          */
  354. };
  355.  
  356. USHORT updn_data[] = {0,0, 0,6, 16,6, 16,0, 0,0};
  357. struct Border updn_border =
  358. {
  359.     -2,-1,1,0,              /* LeftEdge, TopEdge, FrontPen, BackPen */
  360.     JAM1,5,                 /* DrawMode, Count                      */
  361.     (USHORT *)&updn_data,   /* *XY                                  */
  362.     &updn_shadow            /* *NextBorder                          */
  363. };
  364.  
  365. USHORT uparr_data[] = {8,2, 3,4, 13,4, 8,2};
  366. struct Border up_arr =
  367. {
  368.     -2,-1,1,0,              /* LeftEdge, TopEdge, FrontPen, BackPen */
  369.     JAM1,4,                 /* DrawMode, Count                      */
  370.     (USHORT *)&uparr_data,  /* *XY                                  */
  371.     &updn_border            /* *NextBorder                          */
  372. };
  373.  
  374. struct Gadget up1 =
  375. {
  376.     &propor1,44,143,           /* *NextGadget, LeftEdge, TopEdge     */
  377.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  378.     GADGIMMEDIATE,             /* Activation                         */
  379.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  380.     NULL,                      /* SelectRender                       */
  381.     NULL,0,                    /* *GadgetText, MutualExclude         */
  382.     NULL,                      /* SpecialInfo                        */
  383.     HARMON0|UPARROW,           /* GadgetID                           */
  384.     NULL                       /* UserData                           */
  385. };
  386.  
  387. /*   down arrow gadget  */
  388.  
  389. USHORT dnarr_data[] = {3,2, 13,2, 8,4, 3,2};
  390. struct Border dn_arr =
  391. {
  392.     -2,-1,1,0,              /* LeftEdge, TopEdge, FrontPen, BackPen */
  393.     JAM1,4,                 /* DrawMode, Count                      */
  394.     (USHORT *)&dnarr_data,  /* *XY                                  */
  395.     &updn_border            /* *NextBorder                          */
  396. };
  397.  
  398. struct Gadget dn1 =
  399. {
  400.     &up1,44,152,               /* *NextGadget, LeftEdge, TopEdge     */
  401.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  402.     GADGIMMEDIATE,             /* Activation                         */
  403.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  404.     NULL,                      /* SelectRender                       */
  405.     NULL,0,                    /* *GadgetText, MutualExclude         */
  406.     NULL,                      /* SpecialInfo                        */
  407.     HARMON0|DNARROW,           /* GadgetID                           */
  408.     NULL                       /* UserData                           */
  409. };
  410.  
  411. /*  Change sign gadget  */
  412.  
  413.                 /* tie shadow for proportional gadget here since
  414.         I can't get border structures working for prop gadgets */
  415. USHORT pshad_data[] = {24,23, 38,23, 38,-45, 39,-45, 39,23, 40,23, 40,-45};
  416.  
  417. struct Border propshad =
  418. {
  419.     -2,-2,2,0,             /* LeftEdge, TopEdge, FrontPen, BackPen   */
  420.     JAM1, 7,               /* DrawMode, Count                        */
  421.     (USHORT *)&pshad_data, /* *XY                                    */
  422.     NULL                   /* *NextBorder                            */
  423. };
  424.  
  425. USHORT plus1[] = {5,3, 9,3};
  426. USHORT plus2[] = {7,2, 7,4};
  427. USHORT minus[] = {5,6, 9,6};
  428. USHORT plmi_data[] = {0,0, 0,8, 15,8, 15,0, 0,0};
  429. USHORT plmi_datas[]= {2,9, 16,9, 16,1, 17,1, 17,9, 18,9, 18,1};
  430.  
  431. struct Border plmi1 =
  432. {
  433.     -2,-1,1,0,            /* LeftEdge, TopEdge, Frontpen, BackPen */
  434.     JAM1,2,               /* DrawMode, Count                      */
  435.     (USHORT *)&plus1,     /* *XY                                  */
  436.     &propshad             /* *NextBorder                     */
  437. };
  438.  
  439. struct Border plmi2 =
  440. {
  441.     -2,-1,1,0,              /* LeftEdge, TopEdge, Frontpen, BackPen */
  442.     JAM1,2,                 /* DrawMode, Count                      */
  443.     (USHORT *)&plus2,&plmi1 /* *XY, *NextBorder                     */
  444. };
  445.  
  446. struct Border plmi3 =
  447. {
  448.     -2,-1,1,0,              /* LeftEdge, TopEdge, Frontpen, BackPen */
  449.     JAM1,2,                 /* DrawMode, Count                      */
  450.     (USHORT *)&minus,&plmi2 /* *XY, *NextBorder                     */
  451. };
  452.  
  453. struct Border plmi4 =
  454. {
  455.     -2,-1,1,0,                  /* LeftEdge, TopEdge, Frontpen, BackPen*/
  456.     JAM1,5,                     /* DrawMode, Count                     */
  457.     (USHORT *)&plmi_data,&plmi3 /* *XY, *NextBorder                    */
  458. };
  459.  
  460. struct Border plmi5 =
  461. {
  462.     -2,-1,2,0,                   /* LeftEdge,TopEdge, Frontpen,BackPen */
  463.     JAM1,7,                      /* DrawMode, Count                    */
  464.     (USHORT *)&plmi_datas,&plmi4 /* *XY, *NextBorder                   */
  465. };
  466.  
  467. struct Gadget plusminus1 =
  468. {
  469.     &dn1,44,161,               /* *NextGadget, LeftEdge, TopEdge     */
  470.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  471.     GADGIMMEDIATE,             /* Activation                         */
  472.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  473.     NULL,                      /* SelectRender                       */
  474.     NULL,0,                    /* *GadgetText, MutualExclude         */
  475.     NULL,                      /* SpecialInfo                        */
  476.     HARMON0|PLUSMINUS,         /* GadgetID                           */
  477.     NULL                       /* UserData                           */
  478. };
  479.  
  480.  
  481. struct Border sel_off_shad =
  482. {
  483.     -2,-1,2,0,                   /* LeftEdge,TopEdge, Frontpen,BackPen */
  484.     JAM1,7,                      /* DrawMode, Count                    */
  485.     (USHORT *)&updn_shadata,     /* *XY                                */
  486.         NULL                         /* *NextBorder                        */
  487. };
  488.  
  489. struct Border sel_on_shad =
  490. {
  491.     -2,-1,2,0,                   /* LeftEdge,TopEdge, Frontpen,BackPen */
  492.     JAM1,7,                      /* DrawMode, Count                    */
  493.     (USHORT *)&updn_shadata,     /* *XY                                */
  494.         NULL                         /* *NextBorder                        */
  495. };
  496.  
  497. USHORT selon_data[] = {0,0, 0,6, 16,6, 16,0, 1,0, 1,1, 15,1, 15,2,
  498.                        1,2, 1,3, 15,3, 15,4, 1,4, 1,5, 15,5};
  499.  
  500. USHORT seloff_data[] = {1,1, 15,1, 15,2,
  501.                         1,2, 1,3, 15,3, 15,4, 1,4, 1,5, 15,5};
  502.  
  503. struct Border sel_off2 =
  504. {
  505.     -2,-1,0,0,                   /* LeftEdge,TopEdge, Frontpen,BackPen */
  506.     JAM1,10,                     /* DrawMode, Count                    */
  507.     (USHORT *)&seloff_data,      /* *XY                                */
  508.         &sel_off_shad                /* *NextBorder                        */
  509. };
  510.  
  511. struct Border sel_off =
  512. {
  513.     -2,-1,5,0,                   /* LeftEdge,TopEdge, Frontpen,BackPen */
  514.     JAM1,5,                      /* DrawMode, Count                    */
  515.     (USHORT *)&updn_data,        /* *XY                                */
  516.         &sel_off2                    /* *NextBorder                        */
  517. };
  518.  
  519. struct Border sel_on =
  520. {
  521.     -2,-1,5,0,                   /* LeftEdge,TopEdge, Frontpen,BackPen */
  522.     JAM1,15,                     /* DrawMode, Count                    */
  523.     (USHORT *)&selon_data,       /* *XY                                */
  524.         &sel_on_shad                 /* *NextBorder                        */
  525. };
  526.  
  527.         struct Gadget select1 =
  528.         {
  529.         &plusminus1,44,172,        /* NextGadget, LeftEdge, TopEdge      */
  530.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  531.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  532.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  533.         (APTR)&sel_on,             /* SelectRender                       */
  534.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  535.         NULL,                      /* SpecialInfo                        */
  536.         HARMON0|SELECT,            /* GadgetID                           */
  537.         NULL                       /* UserData                           */
  538.         };
  539.  
  540. /*************************************/
  541. /*     Second amplitude gadgets       */
  542. /*************************************/
  543.  
  544. /*  Proportional gadget  */
  545.  
  546. struct PropInfo prop_info2 =
  547. {
  548.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  549.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  550.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  551.     16,64,              /* CWidth,CHeight                         */
  552.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  553.     0,0                 /* LeftBorder, TopBorder                  */
  554. };
  555.  
  556. struct IntuiText protext2 =
  557. {
  558.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  559.     -20, 3,             /* LeftEdge, TopEdge                      */
  560.     NULL,"2:",          /* *ITextFont, *Itext                     */
  561.     NULL                /* *NextText                              */
  562. };
  563.  
  564. struct Gadget propor2 =
  565. {
  566.     &select1,139,113,          /* *NextGadget, LeftEdge, TopEdge     */
  567.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  568.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  569.     PROPGADGET,(APTR)&empty2,  /* GadgetType, GadgetRender           */
  570.     NULL,                      /* SelectRender                       */
  571.     &protext2,0,               /* *GadgetText, MutualExclude         */
  572.     (APTR)&prop_info2,         /* SpecialInfo                        */
  573.     HARMON1|PROPOR,            /* GadgetID                           */
  574.     NULL                       /* UserData                           */
  575. };
  576.  
  577. /*   Up arrow gadget     */
  578.  
  579. struct Gadget up2 =
  580. {
  581.     &propor2,118,143,          /* *NextGadget, LeftEdge, TopEdge     */
  582.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  583.     GADGIMMEDIATE,             /* Activation                         */
  584.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  585.     NULL,                      /* SelectRender                       */
  586.     NULL,0,                    /* *GadgetText, MutualExclude         */
  587.     NULL,                      /* SpecialInfo                        */
  588.     HARMON1|UPARROW,           /* GadgetID                           */
  589.     NULL                       /* UserData                           */
  590. };
  591.  
  592. /*   down arrow gadget  */
  593.  
  594. struct Gadget dn2 =
  595. {
  596.     &up2,118,152,               /* *NextGadget, LeftEdge, TopEdge     */
  597.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  598.     GADGIMMEDIATE,             /* Activation                         */
  599.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  600.     NULL,                      /* SelectRender                       */
  601.     NULL,0,                    /* *GadgetText, MutualExclude         */
  602.     NULL,                      /* SpecialInfo                        */
  603.     HARMON1|DNARROW,           /* GadgetID                           */
  604.     NULL                       /* UserData                           */
  605. };
  606.  
  607. /*  Change sign gadget  */
  608.  
  609. struct Gadget plusminus2 =
  610. {
  611.     &dn2,118,161,              /* *NextGadget, LeftEdge, TopEdge     */
  612.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  613.     GADGIMMEDIATE,             /* Activation                         */
  614.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  615.     NULL,                      /* SelectRender                       */
  616.     NULL,0,                    /* *GadgetText, MutualExclude         */
  617.     NULL,                      /* SpecialInfo                        */
  618.     HARMON1|PLUSMINUS,         /* GadgetID                           */
  619.     NULL                       /* UserData                           */
  620. };
  621.  
  622.         struct Gadget select2 =
  623.         {
  624.         &plusminus2,118,172,       /* NextGadget, LeftEdge, TopEdge      */
  625.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  626.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  627.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  628.         (APTR)&sel_on,             /* SelectRender                       */
  629.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  630.         NULL,                      /* SpecialInfo                        */
  631.         HARMON1|SELECT,            /* GadgetID                           */
  632.         NULL                       /* UserData                           */
  633.         };
  634.  
  635. /*************************************/
  636. /*     Third amplitude gadgets       */
  637. /*************************************/
  638.  
  639. /*  Proportional gadget  */
  640.  
  641. struct PropInfo prop_info3 =
  642. {
  643.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  644.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  645.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  646.     16,64,              /* CWidth,CHeight                         */
  647.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  648.     0,0                 /* LeftBorder, TopBorder                  */
  649. };
  650.  
  651. struct IntuiText protext3 =
  652. {
  653.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  654.     -20, 3,             /* LeftEdge, TopEdge                      */
  655.     NULL,"3:",          /* *ITextFont, *Itext                     */
  656.     NULL                /* *NextText                              */
  657. };
  658.  
  659. struct Gadget propor3 =
  660. {
  661.     &select2,213,113,          /* *NextGadget, LeftEdge, TopEdge     */
  662.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  663.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  664.     PROPGADGET,(APTR)&empty3,  /* GadgetType, GadgetRender           */
  665.     NULL,                      /* SelectRender                       */
  666.     &protext3,0,               /* *GadgetText, MutualExclude         */
  667.     (APTR)&prop_info3,         /* SpecialInfo                        */
  668.     HARMON2|PROPOR,            /* GadgetID                           */
  669.     NULL                       /* UserData                           */
  670. };
  671.  
  672. /*   Up arrow gadget     */
  673.  
  674. struct Gadget up3 =
  675. {
  676.     &propor3,192,143,          /* *NextGadget, LeftEdge, TopEdge     */
  677.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  678.     GADGIMMEDIATE,             /* Activation                         */
  679.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  680.     NULL,                      /* SelectRender                       */
  681.     NULL,0,                    /* *GadgetText, MutualExclude         */
  682.     NULL,                      /* SpecialInfo                        */
  683.     HARMON2|UPARROW,           /* GadgetID                           */
  684.     NULL                       /* UserData                           */
  685. };
  686.  
  687. /*   down arrow gadget  */
  688.  
  689. struct Gadget dn3 =
  690. {
  691.     &up3,192,152,               /* *NextGadget, LeftEdge, TopEdge     */
  692.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  693.     GADGIMMEDIATE,             /* Activation                         */
  694.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  695.     NULL,                      /* SelectRender                       */
  696.     NULL,0,                    /* *GadgetText, MutualExclude         */
  697.     NULL,                      /* SpecialInfo                        */
  698.     HARMON2|DNARROW,           /* GadgetID                           */
  699.     NULL                       /* UserData                           */
  700. };
  701.  
  702. /*  Change sign gadget  */
  703.  
  704. struct Gadget plusminus3 =
  705. {
  706.     &dn3,192,161,              /* *NextGadget, LeftEdge, TopEdge     */
  707.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  708.     GADGIMMEDIATE,             /* Activation                         */
  709.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  710.     NULL,                      /* SelectRender                       */
  711.     NULL,0,                    /* *GadgetText, MutualExclude         */
  712.     NULL,                      /* SpecialInfo                        */
  713.     HARMON2|PLUSMINUS,         /* GadgetID                           */
  714.     NULL                       /* UserData                           */
  715. };
  716.  
  717.         struct Gadget select3 =
  718.         {
  719.         &plusminus3,192,172,       /* NextGadget, LeftEdge, TopEdge      */
  720.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  721.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  722.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  723.         (APTR)&sel_on,             /* SelectRender                       */
  724.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  725.         NULL,                      /* SpecialInfo                        */
  726.         HARMON2|SELECT,            /* GadgetID                           */
  727.         NULL                       /* UserData                           */
  728.         };
  729.  
  730. /*************************************/
  731. /*     Fourth amplitude gadgets      */
  732. /*************************************/
  733.  
  734. /*  Proportional gadget  */
  735.  
  736. struct PropInfo prop_info4 =
  737. {
  738.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  739.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  740.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  741.     16,64,              /* CWidth,CHeight                         */
  742.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  743.     0,0                 /* LeftBorder, TopBorder                  */
  744. };
  745.  
  746. struct IntuiText protext4 =
  747. {
  748.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  749.     -20, 3,             /* LeftEdge, TopEdge                      */
  750.     NULL,"4:",          /* *ITextFont, *Itext                     */
  751.     NULL                /* *NextText                              */
  752. };
  753.  
  754. struct Gadget propor4 =
  755. {
  756.     &select3,287,113,          /* *NextGadget, LeftEdge, TopEdge     */
  757.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  758.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  759.     PROPGADGET,(APTR)&empty4,  /* GadgetType, GadgetRender           */
  760.     NULL,                      /* SelectRender                       */
  761.     &protext4,0,               /* *GadgetText, MutualExclude         */
  762.     (APTR)&prop_info4,         /* SpecialInfo                        */
  763.     HARMON3|PROPOR,            /* GadgetID                           */
  764.     NULL                       /* UserData                           */
  765. };
  766.  
  767. /*   Up arrow gadget     */
  768.  
  769. struct Gadget up4 =
  770. {
  771.     &propor4,266,143,          /* *NextGadget, LeftEdge, TopEdge     */
  772.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  773.     GADGIMMEDIATE,             /* Activation                         */
  774.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  775.     NULL,                      /* SelectRender                       */
  776.     NULL,0,                    /* *GadgetText, MutualExclude         */
  777.     NULL,                      /* SpecialInfo                        */
  778.     HARMON3|UPARROW,           /* GadgetID                           */
  779.     NULL                       /* UserData                           */
  780. };
  781.  
  782. /*   down arrow gadget  */
  783.  
  784. struct Gadget dn4 =
  785. {
  786.     &up4,266,152,              /* *NextGadget, LeftEdge, TopEdge     */
  787.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  788.     GADGIMMEDIATE,             /* Activation                         */
  789.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  790.     NULL,                      /* SelectRender                       */
  791.     NULL,0,                    /* *GadgetText, MutualExclude         */
  792.     NULL,                      /* SpecialInfo                        */
  793.     HARMON3|DNARROW,           /* GadgetID                           */
  794.     NULL                       /* UserData                           */
  795. };
  796.  
  797. /*  Change sign gadget  */
  798.  
  799. struct Gadget plusminus4 =
  800. {
  801.     &dn4,266,161,              /* *NextGadget, LeftEdge, TopEdge     */
  802.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  803.     GADGIMMEDIATE,             /* Activation                         */
  804.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  805.     NULL,                      /* SelectRender                       */
  806.     NULL,0,                    /* *GadgetText, MutualExclude         */
  807.     NULL,                      /* SpecialInfo                        */
  808.     HARMON3|PLUSMINUS,         /* GadgetID                           */
  809.     NULL                       /* UserData                           */
  810. };
  811.  
  812.         struct Gadget select4 =
  813.         {
  814.         &plusminus4,266,172,       /* NextGadget, LeftEdge, TopEdge      */
  815.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  816.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  817.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  818.         (APTR)&sel_on,             /* SelectRender                       */
  819.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  820.         NULL,                      /* SpecialInfo                        */
  821.         HARMON3|SELECT,            /* GadgetID                           */
  822.         NULL                       /* UserData                           */
  823.         };
  824.  
  825. /*************************************/
  826. /*     Fifth amplitude gadgets       */
  827. /*************************************/
  828.  
  829. /*  Proportional gadget  */
  830.  
  831. struct PropInfo prop_info5 =
  832. {
  833.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  834.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  835.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  836.     16,64,              /* CWidth,CHeight                         */
  837.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  838.     0,0                 /* LeftBorder, TopBorder                  */
  839. };
  840.  
  841. struct IntuiText protext5 =
  842. {
  843.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  844.     -20, 3,             /* LeftEdge, TopEdge                      */
  845.     NULL,"5:",          /* *ITextFont, *Itext                     */
  846.     NULL                /* *NextText                              */
  847. };
  848.  
  849. struct Gadget propor5 =
  850. {
  851.     &select4,361,113,          /* *NextGadget, LeftEdge, TopEdge     */
  852.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  853.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  854.     PROPGADGET,(APTR)&empty5,  /* GadgetType, GadgetRender           */
  855.     NULL,                      /* SelectRender                       */
  856.     &protext5,0,               /* *GadgetText, MutualExclude         */
  857.     (APTR)&prop_info5,         /* SpecialInfo                        */
  858.     HARMON4|PROPOR,            /* GadgetID                           */
  859.     NULL                       /* UserData                           */
  860. };
  861.  
  862. /*   Up arrow gadget     */
  863.  
  864. struct Gadget up5 =
  865. {
  866.     &propor5,341,143,          /* *NextGadget, LeftEdge, TopEdge     */
  867.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  868.     GADGIMMEDIATE,             /* Activation                         */
  869.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  870.     NULL,                      /* SelectRender                       */
  871.     NULL,0,                    /* *GadgetText, MutualExclude         */
  872.     NULL,                      /* SpecialInfo                        */
  873.     HARMON4|UPARROW,           /* GadgetID                           */
  874.     NULL                       /* UserData                           */
  875. };
  876.  
  877. /*   down arrow gadget  */
  878.  
  879. struct Gadget dn5 =
  880. {
  881.     &up5,340,152,               /* *NextGadget, LeftEdge, TopEdge     */
  882.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  883.     GADGIMMEDIATE,             /* Activation                         */
  884.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  885.     NULL,                      /* SelectRender                       */
  886.     NULL,0,                    /* *GadgetText, MutualExclude         */
  887.     NULL,                      /* SpecialInfo                        */
  888.     HARMON4|DNARROW,           /* GadgetID                           */
  889.     NULL                       /* UserData                           */
  890. };
  891.  
  892. /*  Change sign gadget  */
  893.  
  894. struct Gadget plusminus5 =
  895. {
  896.     &dn5,340,161,              /* *NextGadget, LeftEdge, TopEdge     */
  897.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  898.     GADGIMMEDIATE,             /* Activation                         */
  899.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  900.     NULL,                      /* SelectRender                       */
  901.     NULL,0,                    /* *GadgetText, MutualExclude         */
  902.     NULL,                      /* SpecialInfo                        */
  903.     HARMON4|PLUSMINUS,         /* GadgetID                           */
  904.     NULL                       /* UserData                           */
  905. };
  906.  
  907.         struct Gadget select5 =
  908.         {
  909.         &plusminus5,340,172,       /* NextGadget, LeftEdge, TopEdge      */
  910.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  911.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  912.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  913.         (APTR)&sel_on,             /* SelectRender                       */
  914.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  915.         NULL,                      /* SpecialInfo                        */
  916.         HARMON4|SELECT,            /* GadgetID                           */
  917.         NULL                       /* UserData                           */
  918.         };
  919.  
  920. /*************************************/
  921. /*     Sixth amplitude gadgets       */
  922. /*************************************/
  923.  
  924. /*  Proportional gadget  */
  925.  
  926. struct PropInfo prop_info6 =
  927. {
  928.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  929.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  930.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  931.     16,64,              /* CWidth,CHeight                         */
  932.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  933.     0,0                 /* LeftBorder, TopBorder                  */
  934. };
  935.  
  936. struct IntuiText protext6 =
  937. {
  938.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  939.     -20, 3,             /* LeftEdge, TopEdge                      */
  940.     NULL,"6:",          /* *ITextFont, *Itext                     */
  941.     NULL                /* *NextText                              */
  942. };
  943.  
  944. struct Gadget propor6 =
  945. {
  946.     &select5,435,113,          /* *NextGadget, LeftEdge, TopEdge     */
  947.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  948.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  949.     PROPGADGET,(APTR)&empty6,  /* GadgetType, GadgetRender           */
  950.     NULL,                      /* SelectRender                       */
  951.     &protext6,0,               /* *GadgetText, MutualExclude         */
  952.     (APTR)&prop_info6,         /* SpecialInfo                        */
  953.     HARMON5|PROPOR,            /* GadgetID                           */
  954.     NULL                       /* UserData                           */
  955. };
  956.  
  957. /*   Up arrow gadget     */
  958.  
  959. struct Gadget up6 =
  960. {
  961.     &propor6,414,143,          /* *NextGadget, LeftEdge, TopEdge     */
  962.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  963.     GADGIMMEDIATE,             /* Activation                         */
  964.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  965.     NULL,                      /* SelectRender                       */
  966.     NULL,0,                    /* *GadgetText, MutualExclude         */
  967.     NULL,                      /* SpecialInfo                        */
  968.     HARMON5|UPARROW,           /* GadgetID                           */
  969.     NULL                       /* UserData                           */
  970. };
  971.  
  972. /*   down arrow gadget  */
  973.  
  974. struct Gadget dn6 =
  975. {
  976.     &up6,414,152,               /* *NextGadget, LeftEdge, TopEdge     */
  977.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  978.     GADGIMMEDIATE,             /* Activation                         */
  979.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  980.     NULL,                      /* SelectRender                       */
  981.     NULL,0,                    /* *GadgetText, MutualExclude         */
  982.     NULL,                      /* SpecialInfo                        */
  983.     HARMON5|DNARROW,           /* GadgetID                           */
  984.     NULL                       /* UserData                           */
  985. };
  986.  
  987. /*  Change sign gadget  */
  988.  
  989. struct Gadget plusminus6 =
  990. {
  991.     &dn6,414,161,              /* *NextGadget, LeftEdge, TopEdge     */
  992.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  993.     GADGIMMEDIATE,             /* Activation                         */
  994.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  995.     NULL,                      /* SelectRender                       */
  996.     NULL,0,                    /* *GadgetText, MutualExclude         */
  997.     NULL,                      /* SpecialInfo                        */
  998.     HARMON5|PLUSMINUS,         /* GadgetID                           */
  999.     NULL                       /* UserData                           */
  1000. };
  1001.  
  1002.         struct Gadget select6 =
  1003.         {
  1004.         &plusminus6,414,172,       /* NextGadget, LeftEdge, TopEdge      */
  1005.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  1006.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  1007.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  1008.         (APTR)&sel_on,             /* SelectRender                       */
  1009.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  1010.         NULL,                      /* SpecialInfo                        */
  1011.         HARMON5|SELECT,            /* GadgetID                           */
  1012.         NULL                       /* UserData                           */
  1013.         };
  1014.  
  1015. /*************************************/
  1016. /*     Seventh amplitude gadgets     */
  1017. /*************************************/
  1018.  
  1019. /*  Proportional gadget  */
  1020.  
  1021. struct PropInfo prop_info7 =
  1022. {
  1023.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  1024.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  1025.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  1026.     16,64,              /* CWidth,CHeight                         */
  1027.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  1028.     0,0                 /* LeftBorder, TopBorder                  */
  1029. };
  1030.  
  1031. struct IntuiText protext7 =
  1032. {
  1033.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  1034.     -20, 3,             /* LeftEdge, TopEdge                      */
  1035.     NULL,"7:",          /* *ITextFont, *Itext                     */
  1036.     NULL                /* *NextText                              */
  1037. };
  1038.  
  1039. struct Gadget propor7 =
  1040. {
  1041.     &select6,509,113,          /* *NextGadget, LeftEdge, TopEdge     */
  1042.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  1043.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  1044.     PROPGADGET,(APTR)&empty7,  /* GadgetType, GadgetRender           */
  1045.     NULL,                      /* SelectRender                       */
  1046.     &protext7,0,               /* *GadgetText, MutualExclude         */
  1047.     (APTR)&prop_info7,         /* SpecialInfo                        */
  1048.     HARMON6|PROPOR,            /* GadgetID                           */
  1049.     NULL                       /* UserData                           */
  1050. };
  1051.  
  1052. /*   Up arrow gadget     */
  1053.  
  1054. struct Gadget up7 =
  1055. {
  1056.     &propor7,488,143,          /* *NextGadget, LeftEdge, TopEdge     */
  1057.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  1058.     GADGIMMEDIATE,             /* Activation                         */
  1059.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  1060.     NULL,                      /* SelectRender                       */
  1061.     NULL,0,                    /* *GadgetText, MutualExclude         */
  1062.     NULL,                      /* SpecialInfo                        */
  1063.     HARMON6|UPARROW,           /* GadgetID                           */
  1064.     NULL                       /* UserData                           */
  1065. };
  1066.  
  1067. /*   down arrow gadget  */
  1068.  
  1069. struct Gadget dn7 =
  1070. {
  1071.     &up7,488,152,               /* *NextGadget, LeftEdge, TopEdge     */
  1072.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  1073.     GADGIMMEDIATE,             /* Activation                         */
  1074.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  1075.     NULL,                      /* SelectRender                       */
  1076.     NULL,0,                    /* *GadgetText, MutualExclude         */
  1077.     NULL,                      /* SpecialInfo                        */
  1078.     HARMON6|DNARROW,           /* GadgetID                           */
  1079.     NULL                       /* UserData                           */
  1080. };
  1081.  
  1082. /*  Change sign gadget  */
  1083.  
  1084. struct Gadget plusminus7 =
  1085. {
  1086.     &dn7,488,161,              /* *NextGadget, LeftEdge, TopEdge     */
  1087.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  1088.     GADGIMMEDIATE,             /* Activation                         */
  1089.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  1090.     NULL,                      /* SelectRender                       */
  1091.     NULL,0,                    /* *GadgetText, MutualExclude         */
  1092.     NULL,                      /* SpecialInfo                        */
  1093.     HARMON6|PLUSMINUS,         /* GadgetID                           */
  1094.     NULL                       /* UserData                           */
  1095. };
  1096.  
  1097.         struct Gadget select7 =
  1098.         {
  1099.         &plusminus7,488,172,       /* NextGadget, LeftEdge, TopEdge      */
  1100.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  1101.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  1102.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  1103.         (APTR)&sel_on,             /* SelectRender                       */
  1104.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  1105.         NULL,                      /* SpecialInfo                        */
  1106.         HARMON6|SELECT,            /* GadgetID                           */
  1107.         NULL                       /* UserData                           */
  1108.         };
  1109.  
  1110. /*************************************/
  1111. /*     Eighth amplitude gadgets      */
  1112. /*************************************/
  1113.  
  1114. /*  Proportional gadget  */
  1115.  
  1116. struct PropInfo prop_info8 =
  1117. {
  1118.     AUTOKNOB|FREEVERT,  /* Flags                                  */
  1119.     0xFFFF,0xFFFF,      /* HorizPot, VertPot                      */
  1120.     0x0800,0x0800,      /* HorizBody, VertBody                    */
  1121.     16,64,              /* CWidth,CHeight                         */
  1122.     0x0800,0x0800,      /* HPotRes, VPotRes                       */
  1123.     0,0                 /* LeftBorder, TopBorder                  */
  1124. };
  1125.  
  1126. struct IntuiText protext8 =
  1127. {
  1128.     1, 2, JAM2,         /* FrontPen, BackPen, DrawMode            */
  1129.     -20, 3,             /* LeftEdge, TopEdge                      */
  1130.     NULL,"8:",          /* *ITextFont, *Itext                     */
  1131.     NULL                /* *NextText                              */
  1132. };
  1133.  
  1134. struct Gadget propor8 =
  1135. {
  1136.     &select7,583,113,          /* *NextGadget, LeftEdge, TopEdge     */
  1137.     14,69,GADGHCOMP|AUTOKNOB,  /* Width, Height, Flags               */
  1138.     RELVERIFY|GADGIMMEDIATE,   /* Activation                         */
  1139.     PROPGADGET,(APTR)&empty8,  /* GadgetType, GadgetRender           */
  1140.     NULL,                      /* SelectRender                       */
  1141.     &protext8,0,               /* *GadgetText, MutualExclude         */
  1142.     (APTR)&prop_info8,         /* SpecialInfo                        */
  1143.     HARMON7|PROPOR,            /* GadgetID                           */
  1144.     NULL                       /* UserData                           */
  1145. };
  1146.  
  1147. /*   Up arrow gadget     */
  1148.  
  1149. struct Gadget up8 =
  1150. {
  1151.     &propor8,562,143,          /* *NextGadget, LeftEdge, TopEdge     */
  1152.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  1153.     GADGIMMEDIATE,             /* Activation                         */
  1154.     BOOLGADGET,(APTR)&up_arr, /* GadgetType, GadgetRender           */
  1155.     NULL,                      /* SelectRender                       */
  1156.     NULL,0,                    /* *GadgetText, MutualExclude         */
  1157.     NULL,                      /* SpecialInfo                        */
  1158.     HARMON7|UPARROW,           /* GadgetID                           */
  1159.     NULL                       /* UserData                           */
  1160. };
  1161.  
  1162. /*   down arrow gadget  */
  1163.  
  1164. struct Gadget dn8 =
  1165. {
  1166.     &up8,562,152,               /* *NextGadget, LeftEdge, TopEdge     */
  1167.     16,6,GADGHCOMP,            /* Width, Height, Flags               */
  1168.     GADGIMMEDIATE,             /* Activation                         */
  1169.     BOOLGADGET,(APTR)&dn_arr,  /* GadgetType, GadgetRender           */
  1170.     NULL,                      /* SelectRender                       */
  1171.     NULL,0,                    /* *GadgetText, MutualExclude         */
  1172.     NULL,                      /* SpecialInfo                        */
  1173.     HARMON7|DNARROW,           /* GadgetID                           */
  1174.     NULL                       /* UserData                           */
  1175. };
  1176.  
  1177. /*  Change sign gadget  */
  1178.  
  1179. struct Gadget plusminus8 =
  1180. {
  1181.     &dn8,562,161,              /* *NextGadget, LeftEdge, TopEdge     */
  1182.     15,8,GADGHCOMP,            /* Width, Height, Flags               */
  1183.     GADGIMMEDIATE,             /* Activation                         */
  1184.     BOOLGADGET,(APTR)&plmi5,   /* GadgetType, GadgetRender           */
  1185.     NULL,                      /* SelectRender                       */
  1186.     NULL,0,                    /* *GadgetText, MutualExclude         */
  1187.     NULL,                      /* SpecialInfo                        */
  1188.     HARMON7|PLUSMINUS,         /* GadgetID                           */
  1189.     NULL                       /* UserData                           */
  1190. };
  1191.  
  1192.         struct Gadget select8 =
  1193.         {
  1194.         &plusminus8,562,172,       /* NextGadget, LeftEdge, TopEdge      */
  1195.         16,6,GADGHIMAGE,           /* Width, Height, Flags               */
  1196.         TOGGLESELECT|GADGIMMEDIATE, /* Activation                        */
  1197.         BOOLGADGET,(APTR)&sel_off, /* GadgetType, GadgetRender           */
  1198.         (APTR)&sel_on,             /* SelectRender                       */
  1199.         NULL, 0,                   /* *GadgetText, MutualExclude         */
  1200.         NULL,                      /* SpecialInfo                        */
  1201.         HARMON7|SELECT,            /* GadgetID                           */
  1202.         NULL                       /* UserData                           */
  1203.         };
  1204.  
  1205. struct Gadget *propadd[8]={&propor1,&propor2,&propor3,&propor4,
  1206.                        &propor5,&propor6,&propor7,&propor8};
  1207.  
  1208. /********************/
  1209. /*  Menu Structures */
  1210. /********************/
  1211.  
  1212.  
  1213. struct IntuiText stoptext = {
  1214.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1215.     0,0,                       /* LeftEdge, TopEdge                  */
  1216.     NULL,"Stop",               /* ITextFont, *IText                  */
  1217.     NULL                       /* *NextText                          */
  1218. };
  1219.  
  1220. struct MenuItem stopgame = {
  1221.     NULL,                      /* *NextItem                          */
  1222.     0,20,80,10,                /* LeftEdge, TopEdge, Width, Height   */
  1223.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1224.     NULL, (APTR)&stoptext,     /* MutualExclude, ItemFill            */
  1225.     NULL,NULL,                 /* Command, *SubItem                  */
  1226.     NULL                       /* NextSelect                         */
  1227. };
  1228.  
  1229. struct IntuiText hardtext = {
  1230.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1231.     0,0,                       /* LeftEdge, TopEdge                  */
  1232.     NULL,"Start-Hard",         /* ITextFont, *IText                  */
  1233.     NULL                       /* *NextText                          */
  1234. };
  1235.  
  1236. struct MenuItem starthard = {
  1237.     &stopgame,                 /* *NextItem                          */
  1238.     0,10,80,10,                /* LeftEdge, TopEdge, Width, Height   */
  1239.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1240.     NULL, (APTR)&hardtext,     /* MutualExclude, ItemFill            */
  1241.     NULL,NULL,                 /* Command, *SubItem                  */
  1242.     NULL                       /* NextSelect                         */
  1243. };
  1244.  
  1245. struct IntuiText easytext = {
  1246.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1247.     0,0,                       /* LeftEdge, TopEdge                  */
  1248.     NULL,"Start-Easy",         /* ITextFont, *IText                  */
  1249.     NULL                       /* *NextText                          */
  1250. };
  1251.  
  1252. struct MenuItem starteasy = {
  1253.     &starthard,                 /* *NextItem                         */
  1254.     0,0,80,10,                 /* LeftEdge, TopEdge, Width, Height   */
  1255.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1256.     NULL, (APTR)&easytext,     /* MutualExclude, ItemFill            */
  1257.     NULL,NULL,                 /* Command, *SubItem                  */
  1258.     NULL                       /* NextSelect                         */
  1259. };
  1260.  
  1261. struct Menu game = {
  1262.     NULL,                      /* *NextMenu                          */
  1263.     161,0,80,10,               /* LeftEdge, TopEdge, Width, Height  */
  1264.     MENUENABLED,               /* Flags                              */
  1265.     "Game",                    /* *MenuName                          */
  1266.     &starteasy                 /* First Item                         */
  1267. };
  1268.  
  1269. struct IntuiText squaretext = {
  1270.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1271.     0,0,                       /* LeftEdge, TopEdge                  */
  1272.     NULL,"Square",             /* ITextFont, *IText                  */
  1273.     NULL                       /* *NextText                          */
  1274. };
  1275.  
  1276. struct MenuItem square = {
  1277.     NULL,                      /* *NextItem                          */
  1278.     0,30,80,10,                /* LeftEdge, TopEdge, Width, Height   */
  1279.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1280.     NULL, (APTR)&squaretext,   /* MutualExclude, ItemFill            */
  1281.     NULL,NULL,                 /* Command, *SubItem                  */
  1282.     NULL                       /* NextSelect                         */
  1283. };
  1284.  
  1285. struct IntuiText sawtext = {
  1286.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1287.     0,0,                       /* LeftEdge, TopEdge                  */
  1288.     NULL,"Sawtooth",           /* ITextFont, *IText                  */
  1289.     NULL                       /* *NextText                          */
  1290. };
  1291.  
  1292. struct MenuItem sawtooth = {
  1293.     &square,                   /* *NextItem                          */
  1294.     0,20,80,10,                /* LeftEdge, TopEdge, Width, Height   */
  1295.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1296.     NULL, (APTR)&sawtext,      /* MutualExclude, ItemFill            */
  1297.     NULL,NULL,                 /* Command, *SubItem                  */
  1298.     NULL                       /* NextSelect                         */
  1299. };
  1300.  
  1301. struct IntuiText triangletext = {
  1302.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1303.     0,0,                       /* LeftEdge, TopEdge                  */
  1304.     NULL,"Triangle",           /* ITextFont, *IText                  */
  1305.     NULL                       /* *NextText                          */
  1306. };
  1307.  
  1308. struct MenuItem triangle = {
  1309.     &sawtooth,                 /* *NextItem                          */
  1310.     0,10,80,10,                /* LeftEdge, TopEdge, Width, Height   */
  1311.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1312.     NULL, (APTR)&triangletext, /* MutualExclude, ItemFill            */
  1313.     NULL,NULL,                 /* Command, *SubItem                  */
  1314.     NULL                       /* NextSelect                         */
  1315. };
  1316.  
  1317. struct IntuiText resettext = {
  1318.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1319.     0,0,                       /* LeftEdge, TopEdge                  */
  1320.     NULL,"Reset",              /* ITextFont, *IText                  */
  1321.     NULL                       /* *NextText                          */
  1322. };
  1323.  
  1324. struct MenuItem resetwave = {
  1325.     &triangle,                 /* *NextItem                          */
  1326.     0,0,80,10,                 /* LeftEdge, TopEdge, Width, Height   */
  1327.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1328.     NULL, (APTR)&resettext,    /* MutualExclude, ItemFill            */
  1329.     NULL,NULL,                 /* Command, *SubItem                  */
  1330.     NULL                       /* NextSelect                         */
  1331. };
  1332.  
  1333. struct Menu waves = {
  1334.     &game,                     /* *NextMenu                          */
  1335.     81,0,80,10,                /* LeftEdge, TopEdge, Width, Height  */
  1336.     MENUENABLED,               /* Flags                              */
  1337.     "Waveforms",               /* *MenuName                          */
  1338.     &resetwave                 /* First Item                         */
  1339. };
  1340.  
  1341. struct IntuiText quittext = {
  1342.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1343.     0,0,                       /* LeftEdge, TopEdge                  */
  1344.     NULL,"Quit",               /* ITextFont, *IText                  */
  1345.     NULL                       /* *NextText                          */
  1346. };
  1347.  
  1348. struct MenuItem quit = {
  1349.     NULL,                      /* *NextItem                          */
  1350.     0,40,120,10,                /* LeftEdge, TopEdge, Width, Height   */
  1351.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1352.     NULL, (APTR)&quittext,     /* MutualExclude, ItemFill            */
  1353.     NULL,NULL,                 /* Command, *SubItem                  */
  1354.     NULL                       /* NextSelect                         */
  1355. };
  1356.  
  1357. struct IntuiText fronttext = {
  1358.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1359.     0,0,                       /* LeftEdge, TopEdge                  */
  1360.     NULL,"Screen to Front",    /* ITextFont, *IText                  */
  1361.     NULL                       /* *NextText                          */
  1362. };
  1363.  
  1364. struct MenuItem scfront = {
  1365.     &quit,                     /* *NextItem                          */
  1366.     0,30,120,10,               /* LeftEdge, TopEdge, Width, Height   */
  1367.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1368.     NULL, (APTR)&fronttext,    /* MutualExclude, ItemFill            */
  1369.     NULL,NULL,                 /* Command, *SubItem                  */
  1370.     NULL                       /* NextSelect                         */
  1371. };
  1372.  
  1373. struct IntuiText backtext = {
  1374.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1375.     0,0,                       /* LeftEdge, TopEdge                  */
  1376.     NULL,"Screen to Back",     /* ITextFont, *IText                  */
  1377.     NULL                       /* *NextText                          */
  1378. };
  1379.  
  1380. struct MenuItem scback = {
  1381.     &scfront,                  /* *NextItem                          */
  1382.     0,20,120,10,               /* LeftEdge, TopEdge, Width, Height   */
  1383.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1384.     NULL, (APTR)&backtext,    /* MutualExclude, ItemFill            */
  1385.     NULL,NULL,                 /* Command, *SubItem                  */
  1386.     NULL                       /* NextSelect                         */
  1387. };
  1388.  
  1389. struct IntuiText expandtext = {
  1390.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1391.     0,0,                       /* LeftEdge, TopEdge                  */
  1392.     NULL,"Full Scale",         /* ITextFont, *IText                  */
  1393.     NULL                       /* *NextText                          */
  1394. };
  1395.  
  1396. struct MenuItem expand = {
  1397.     &scback,                   /* *NextItem                          */
  1398.     0,10,120,10,               /* LeftEdge, TopEdge, Width, Height   */
  1399.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1400.     NULL, (APTR)&expandtext,   /* MutualExclude, ItemFill            */
  1401.     NULL,NULL,                 /* Command, *SubItem                  */
  1402.     NULL                       /* NextSelect                         */
  1403. };
  1404.  
  1405. struct IntuiText abouttext = {
  1406.     0,1,JAM1,                  /* FrontPen, BackPen, DrawMode        */
  1407.     0,0,                       /* LeftEdge, TopEdge                  */
  1408.     NULL,"About",              /* ITextFont, *IText                  */
  1409.     NULL                       /* *NextText                          */
  1410. };
  1411.  
  1412. struct MenuItem about = {
  1413.     &expand,                   /* *NextItem                          */
  1414.     0,0,120,10,                /* LeftEdge, TopEdge, Width, Height   */
  1415.     ITEMTEXT|ITEMENABLED|HIGHCOMP, /* Flags                          */
  1416.     NULL, (APTR)&abouttext,    /* MutualExclude, ItemFill            */
  1417.     NULL,NULL,                 /* Command, *SubItem                  */
  1418.     NULL                       /* NextSelect                         */
  1419. };
  1420.  
  1421. struct Menu project = {
  1422.     &waves,                    /* *NextMenu                          */
  1423.     0,0,80,10,                 /* LeftEdge, TopEdge, Width, Height   */
  1424.     MENUENABLED,               /* Flags                              */
  1425.     "Project",                 /* *MenuName                          */
  1426.     &about                     /* First Item                         */
  1427. };
  1428.  
  1429. /****************************************/
  1430. /*     "about" requester structures     */
  1431. /****************************************/
  1432.  
  1433. struct IntuiText OK = {0,1,JAM2,5,4,NULL,"OK",NULL};
  1434.  
  1435. struct IntuiText About7 = {0,1,JAM2,8,85,NULL,
  1436.     "Click on either <OK> box to proceed",
  1437.     NULL};
  1438.     
  1439. struct IntuiText About6 = {0,1,JAM2,8,70,NULL,
  1440.     "                           internet: meyer@iastate.edu",
  1441.     &About7};
  1442.     
  1443. struct IntuiText About5 = {0,1,JAM2,8,60,NULL,
  1444.     "Ames, IA, 50011, USA.      BITNET: MEYER@ALISUVAX",
  1445.     &About6};
  1446.     
  1447. struct IntuiText About4 = {0,1,JAM2,8,50,NULL,
  1448.     "W. T. Meyer, 12 Physics, Iowa State University,",
  1449.     &About5};
  1450.     
  1451. struct IntuiText About3 = {0,1,JAM2,8,30,NULL,
  1452.     "Comments and suggestions may be sent to:",
  1453.     &About4};
  1454.     
  1455. struct IntuiText About2 = {0,1,JAM2,8,20,NULL,
  1456.     "Copyright (c) 1990, 1991 by W. T. Meyer.",
  1457.     &About3};
  1458.     
  1459. struct IntuiText About1 = {0,1,JAM2,8,10,NULL,
  1460.     "WaveMaker is freely distributable for noncommercial use.",
  1461.     &About2};
  1462.     
  1463. /*************************************/
  1464. /*   "Answers" requester structures  */
  1465. /*************************************/
  1466.  
  1467. char Answers[80];
  1468.     
  1469. struct IntuiText Answer3 = {0,1,JAM2,8,30,NULL,
  1470.     "Click on either <OK> box to proceed",
  1471.     NULL};
  1472.     
  1473. struct IntuiText Answer2 = {0,1,JAM2,8,20,NULL,
  1474.     (char *)&Answers,&Answer3};
  1475.     
  1476. struct IntuiText Answer1 = {0,1,JAM2,8,10,NULL,
  1477.     "The answers are:",&Answer2};
  1478.     
  1479. /************************************************************/
  1480. main()
  1481. /************************************************************/
  1482. {
  1483.     ULONG mclass;
  1484.     USHORT mcode,mqual,gadID,gadno,gadtyp,i;
  1485.     USHORT amptopot();
  1486.     unsigned seed;
  1487.     LONG pottoamp(),MakeWave();
  1488.     SHORT potsign,keyraw,keyup,keyrepeat;
  1489.     struct Gadget *mgadget;
  1490.     struct PropInfo *propinfo;
  1491.     VOID OpenLibs(),WaveCleanup(),MakeDisplay(),MakeSin(),MakePalette();
  1492.     VOID AmpsUpDate(),PropUpdate(),DrawBoxes(),DrawUser();
  1493.     VOID SoundOn(),SoundOff(),MenuSetup(),DoMenu(),OpenAudio();
  1494.     VOID Update(),InitArrays();
  1495.     
  1496. /*  Initialization  */
  1497.  
  1498.     OpenLibs();
  1499.     
  1500.     OpenAudio();
  1501.     
  1502.     seed = (unsigned)time(NULL);
  1503.     srand(seed);
  1504.     
  1505.     MakeSin();
  1506.     
  1507.     for (i=0;i<8;++i) amps[i]=0;
  1508.     
  1509.     InitArrays();
  1510.  
  1511.     MakeDisplay();
  1512.     
  1513.     SetMenuStrip(Window,&project);
  1514.     
  1515.   
  1516.  /*  Set up an IDCMP Read Loop  */
  1517.  
  1518.     for(;;) {
  1519.     Wait(1<<Window->UserPort->mp_SigBit);
  1520.  
  1521.     while((mesg=(struct IntuiMessage *)
  1522.        GetMsg(Window->UserPort))!=NULL)  /* Wait for IntuiMessage    */
  1523.     {
  1524.         mclass = mesg->Class;        /* Run through all of them  */
  1525.         mcode = mesg->Code;          /* Local copies of variables*/
  1526.         mqual = mesg->Qualifier;
  1527.         mgadget =(struct Gadget *)mesg->IAddress;
  1528.                 switch(mclass)
  1529.         {
  1530.            case CLOSEWINDOW: 
  1531.            {
  1532.              WaveCleanup();
  1533.             Exit(TRUE);
  1534.             break;
  1535.            }
  1536.            case REFRESHWINDOW:
  1537.            {
  1538.             DrawBoxes();
  1539.             Update(0);
  1540.             break;
  1541.            }
  1542.            case MENUPICK:
  1543.            {
  1544.             DoMenu(mcode);
  1545.             break;
  1546.            }
  1547.            case GADGETDOWN:
  1548.            {
  1549.                 gadID = mgadget->GadgetID;
  1550.             gadno = gadID&0x7;
  1551.             gadtyp = gadID&0x78;
  1552.             switch(gadtyp)
  1553.             {
  1554.               case UPARROW:
  1555.                 if (amps[gadno]>=0) ++amps[gadno];
  1556.                 else --amps[gadno];
  1557.                 Update(gadno);
  1558.                 ModifyProp(propadd[gadno],Window,NULL,
  1559.                   FREEVERT|AUTOKNOB,0xFFFF,
  1560.                   amptopot(amps[gadno]),0x0800,0x0800);
  1561.                 break;
  1562.               case DNARROW:
  1563.                 if (amps[gadno]>=0) --amps[gadno];
  1564.                 else ++amps[gadno];
  1565.                 Update(gadno);
  1566.                 ModifyProp(propadd[gadno],Window,NULL,
  1567.                   FREEVERT|AUTOKNOB,0xFFFF,
  1568.                   amptopot(amps[gadno]),0x0800,0x0800);
  1569.                 break;
  1570.               case PLUSMINUS:
  1571.                 amps[gadno]=-amps[gadno];
  1572.                 Update(gadno);
  1573.                 break;
  1574.               case PROPOR:
  1575.                 break;
  1576.                           case SELECT:
  1577.                                 if (selflag & bitval[gadno])
  1578.                                   selflag=selflag&bitval[gadno+8];
  1579.                                 else
  1580.                                   selflag = selflag | bitval[gadno];
  1581.                                 DrawUser();
  1582.                                 break;
  1583.                   }
  1584.               break;
  1585.            }
  1586.            case GADGETUP:
  1587.            {
  1588.             gadID = mgadget->GadgetID;
  1589.                 gadno = gadID&0x7;
  1590.             gadtyp = gadID&0x38;
  1591.             switch(gadtyp)
  1592.             {
  1593.               case UPARROW:
  1594.                 break;
  1595.               case DNARROW:
  1596.                 break;
  1597.               case PLUSMINUS:
  1598.                 break;
  1599.               case PROPOR:
  1600.                 potsign=1;
  1601.                 if (amps[gadno]<0) potsign=-1;
  1602.                 propinfo=(struct PropInfo *)mgadget->SpecialInfo;
  1603.                 amps[gadno]=pottoamp(propinfo->VertPot,
  1604.                     potsign);
  1605.                 Update(gadno);
  1606.                 break;
  1607.                           case SELECT:
  1608.                                 break;
  1609.               }
  1610.               break;
  1611.            }
  1612.            case RAWKEY:
  1613.                 keyrepeat=mqual&IEQUALIFIER_REPEAT;
  1614.             keyraw = mcode&0x7F;
  1615.             keyup = mcode&0x80;
  1616.             if (keyup==0&&!keyrepeat) 
  1617.                 SoundOn(keyraw,usersound);
  1618.             if (keyup!=0) SoundOff(keyraw);
  1619.             break;
  1620.         }
  1621.         ReplyMsg(mesg);              /* Give message back        */
  1622.     }
  1623.     }
  1624. }
  1625.